﻿using System;
using System.Linq;
using Castle.MonoRail.Framework;
using System.Collections.Generic;
using CoopSaude.Dto;

namespace CoopSaude.Controllers
{
    [ControllerDetails(Area = "Prontuario")]
    [DefaultAction("Buscar")]
    public class FisioterapiaController : BaseController
    {
        #region Actions
        public void Buscar()
        {
			List<FisioterapeutaDto> fisios = FisioterapeutaDto.ListarFisioterapeutas();
			List<PacienteDto> pacientes;
			string paciente = Params["paciente"];
            if (String.IsNullOrEmpty(paciente))
                paciente = string.Empty;

            pacientes = PacienteDto.BuscarPorNome(paciente);
            PropertyBag["pacientes"] = pacientes;
            Session["listaPacientes"] = pacientes;

			PropertyBag["fisios"] = fisios;
			Session["listaFisios"] = fisios;
			this.MenuUtilizado = "prontuario";
			this.SecaoUtilizada = "fisioterapia";
			this.AcaoUtilizada = "buscar";
        }

        public void Listar()
        {
            string idPaciente = Params["paciente_sel"];
			string idFisio = Params["fisio_sel"];

			List<InfoSessaoDTO> sessoes;
			List<PacienteDto> listaPaciente = (List<PacienteDto>)Session["listaPacientes"];
			List<FisioterapeutaDto> listaFisio = (List<FisioterapeutaDto>)Session["listaFisios"];
			try
			{
				sessoes = InfoSessaoDTO.ListarSessoes(idFisio, idPaciente).OrderBy(x => x.Data).ToList();
				PropertyBag["sessoes"] = sessoes;
				PropertyBag["paciente"] = listaPaciente.Find(x => x.Id == int.Parse(idPaciente));
				PropertyBag["fisio"] = listaFisio.Find(x => x.Id == int.Parse(idFisio));
				Session["sessoes"] = sessoes;
			}
			catch (Exception)
			{
				Flash["error"] = "Ocorreu um erro ao acessar o serviço";
			}
        }

        public void Criar()
        {
			List<FisioterapeutaDto> fisios = null;
			string paciente = Params["paciente"];
            if (String.IsNullOrEmpty(paciente))
                paciente = string.Empty;
            PropertyBag["pacientes"] = PacienteDto.BuscarPorNome(paciente);
			if (Session["listaFisios"] == null)
			{
				fisios = FisioterapeutaDto.ListarFisioterapeutas();
				Session["listaFisios"] = fisios;
			}
			else
			{
				fisios = (List<FisioterapeutaDto>)Session["listaFisios"];
			}
			PropertyBag["fisios"] = fisios;
			this.MenuUtilizado = "prontuario";
			this.SecaoUtilizada = "fisioterapia";
			this.AcaoUtilizada = "criar";
        }

        public void Salvar()
        {
			string idFisio = Params["fisio_sel"];
			string idPaciente = Params["paciente_sel"];
			string descricao = Params["descricao"];
			try
			{
				List<PacienteDto> listaPaciente = (List<PacienteDto>)Session["listaPaciente"];
                if (listaPaciente == null)
                    listaPaciente = PacienteDto.BuscarPorNome(string.Empty);
				List<FisioterapeutaDto> listaFisio = (List<FisioterapeutaDto>)Session["listaFisios"];
                if (listaFisio == null)
                    listaFisio = FisioterapeutaDto.ListarFisioterapeutas();
				InfoSessaoDTO sessao = InfoSessaoDTO.CriarSessao(idFisio, idPaciente, descricao);
				PropertyBag["sessao"] = sessao;
				PropertyBag["paciente"] = listaPaciente.Find(x => x.Id == int.Parse(sessao.IdPaciente));
				PropertyBag["fisio"] = listaFisio.Find(x => x.Id == int.Parse(idFisio));
				RenderView("detalhar");
			}
			catch (Exception)
			{
				Flash["error"] = "Ocorreu um erro ao acessar o serviço";
				RenderView("criar");
			}
        }

		public void Detalhar()
		{
			List<InfoSessaoDTO> sessoes = (List<InfoSessaoDTO>)Session["sessoes"];
			int idSessao = Int32.Parse(Params["idSessao"]);
			List<PacienteDto> listaPaciente = (List<PacienteDto>)Session["listaPaciente"];
			List<FisioterapeutaDto> listaFisio = (List<FisioterapeutaDto>)Session["listaFisios"];
			InfoSessaoDTO sessao = sessoes.Find(x => x.Id == idSessao);

			PropertyBag["paciente"] = listaPaciente.Find(x => x.Id == int.Parse(sessao.IdPaciente));
			PropertyBag["fisio"] = listaFisio.Find(x => x.Id == int.Parse(sessao.IdFisioterapeuta));
			PropertyBag["sessao"] = sessao;
		}

        #endregion Actions
    }
}
